package com.wis.util;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 通用返回结果封装类
 * 用于统一API接口的返回格式
 */
@Data  // Lombok注解，自动生成getter/setter、toString、equals和hashCode方法
@AllArgsConstructor
@NoArgsConstructor
public class CommonResult {

    /**
     * 状态码
     * 200表示成功，500表示服务器错误，其他自定义状态码
     */
    private Integer code;

    /**
     * 返回消息
     * 用于描述操作结果
     */
    private String msg;

    /**
     * 数据总量
     * 主要用于分页场景，表示总记录数
     */
    private int count;

    /**
     * 当前分页数据/返回的业务数据
     * 可以是单个对象、集合或其他数据类型
     */
    private Object data;

    /**
     * 构建完整CommonResult对象的静态工厂方法
     * @param code 状态码
     * @param msg 返回消息
     * @param count 数据总量
     * @param data 业务数据
     * @return 构建好的CommonResult对象
     */
    public static CommonResult build(Integer code, String msg, int count, Object data) {
        return new CommonResult(code, msg, count, data);
    }

    /**
     * 构建简单CommonResult对象的静态工厂方法（不带数据和总数）
     * @param code 状态码
     * @param msg 返回消息
     * @return 构建好的CommonResult对象
     */
    public static CommonResult build(Integer code, String msg) {
        return new CommonResult(code, msg, 0, null);
    }

    /**
     * 快速构建成功响应（不带数据）
     * @return 状态码200，"ok"消息的CommonResult对象
     */
    public static CommonResult ok() {
        return new CommonResult(200, "ok", 0, null);
    }

    /**
     * 快速构建成功响应（带数据）
     * @param object 要返回的业务数据
     * @return 状态码200，"ok"消息，包含数据的CommonResult对象
     */
    public static CommonResult ok(Object object) {
        return new CommonResult(200, "ok", 0, object);
    }

    /**
     * 快速构建失败响应
     * @return 状态码500，"失败"消息的CommonResult对象
     */
    public static CommonResult fail() {
        return new CommonResult(500, "失败", 0, null);
    }
}